knitr::opts_knit$set(root.dir = dirname(getwd()))
d.img = "./data/xrays/20191017_Xray_Pollock01-06/" #xray folder
d.sh = "./data/xrays/shapes" #shapes folder
d.krm = "./results/KRM"
sp="Pollock"
library(KRMr)
## Warning: vorhergehender Import 'ggplot2::last_plot' durch 'plotly::last_plot'
## während des Ladens von 'KRMr' ersetzt
## Warning: vorhergehender Import 'DT::dataTableOutput' durch
## 'shiny::dataTableOutput' während des Ladens von 'KRMr' ersetzt
## Warning: vorhergehender Import 'DT::renderDataTable' durch
## 'shiny::renderDataTable' während des Ladens von 'KRMr' ersetzt
library(imager)
library(ggplot2)
imfns = list.files(path=d.img,pattern=".jpg", full.names = T)

Pollock

frequency=(12:300)*1e3 #frequencies Hz
theta = seq(65,115) #orientations

c.w = 1490 #Ambient water m/s
rho.w = 1026.8 #density ambient water kg/m3

c.fb=1570 #soundspeed body 
c.b=345 #soundspeed swimbladder
cs = c(c.fb, c.b)

rho.fb=1070 #density body kg/m3
rho.b=1.24 #density swimbladder kg/m3
rhos = c(rho.fb, rho.b)

L = c(29.7,24.1,36,34.2,23.9,33.9)/1e2 #Lengths for pollocks in m

XRay 1

imfns = list.files(path=d.img,pattern=".jpg", full.names = T)
par(mfrow=c(1,2))
plot(load.image(imfns[1]))
plot(load.image(imfns[2]))

KRM shape

shp1 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "01.csv")))
KRMr::get_shp3d(shp1)
## 2023-02-24 11:43:27:2 Body parts detected

KRM

ofn = paste0(d.krm,"/krm_", sp, "_01.csv") #output filename
if(file.exists(ofn)==F){
  #Run KRM
  krm1 = krm(frequency = frequency,
      c.w = c.w,
      rho.w = rho.w,
      theta = theta,
      cs =cs,
      rhos = rhos,
      shape = shp1,
      modes = c("fluid","soft"),
      L = L[1],
      fb = 1)
  
  write.csv(krm1,ofn)
}else{krm1 = read.csv(ofn)}

Plot result:

plot_res = function(data=krm1, lims=c(-60,-30)){
  ggplot(data=data, aes(x=frequency/1e3, y=theta, fill=TS))+
    geom_tile()+
    scale_fill_gradientn(colors=rev(pals::brewer.spectral(15)), 
                         limits=lims, oob=scales::squish,
                         name=expression(TS~"(dB re 1"*m^2*")"))+
    scale_x_continuous(expand=c(0,0))+
    scale_y_continuous(expand=c(0,0))+
    ylab(expression(theta~"(°)"))+
    xlab("Frequency (kHz)")+
    theme_classic()+
    theme(legend.position = "bottom",
          text=element_text(size=16),
          legend.key.width = unit(2, 'cm'))
}
plot_res(krm1,c(-60,-30))

XRay 2

par(mfrow=c(1,2))
plot(load.image(imfns[3]))
plot(load.image(imfns[4]))

KRM shape

shp2 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "02.csv")))
KRMr::get_shp3d(shp2)
## 2023-02-24 11:43:40:2 Body parts detected

KRM

ofn = paste0(d.krm,"/krm_", sp, "_02.csv") #output filename
if(file.exists(ofn)==F){
  #Run KRM
  krm2 = krm(frequency = frequency,
      c.w = c.w,
      rho.w = rho.w,
      theta = theta,
      cs =cs,
      rhos = rhos,
      shape = shp1,
      modes = c("fluid","soft"),
      L = L[2],
      fb = 1)
  
  write.csv(krm2,ofn)
}else{krm2 = read.csv(ofn)}

Plot result:

plot_res(krm2,c(-60,-30))

XRay 3

par(mfrow=c(1,2))
plot(load.image(imfns[5]))
plot(load.image(imfns[6]))

KRM shape

shp3 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "03.csv")))
KRMr::get_shp3d(shp3)
## 2023-02-24 11:43:53:2 Body parts detected

KRM

ofn = paste0(d.krm,"/krm_", sp, "_03.csv") #output filename
if(file.exists(ofn)==F){
  #Run KRM
  krm3 = krm(frequency = frequency,
      c.w = c.w,
      rho.w = rho.w,
      theta = theta,
      cs =cs,
      rhos = rhos,
      shape = shp1,
      modes = c("fluid","soft"),
      L = L[3],
      fb = 1)
  
  write.csv(krm3,ofn)
}else{krm3 = read.csv(ofn)}

Plot result:

plot_res(krm3,c(-60,-30))

XRay 4

par(mfrow=c(1,2))
plot(load.image(imfns[7]))
plot(load.image(imfns[8]))

KRM shape

shp4 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "04.csv")))
KRMr::get_shp3d(shp4)
## 2023-02-24 11:44:06:2 Body parts detected

KRM

ofn = paste0(d.krm,"/krm_", sp, "_04.csv") #output filename
if(file.exists(ofn)==F){
  #Run KRM
  krm4 = krm(frequency = frequency,
      c.w = c.w,
      rho.w = rho.w,
      theta = theta,
      cs =cs,
      rhos = rhos,
      shape = shp1,
      modes = c("fluid","soft"),
      L = L[4],
      fb = 1)
  
  write.csv(krm4,ofn)
}else{krm4 = read.csv(ofn)}

Plot result:

plot_res(krm4,c(-60,-30))